package javaTeste.tClasse;

import java.classe.Classe;
import java.classe.ClasseEntidade;
import java.classe.Construtor;
import java.classe.TokensSource;
import java.recurso.Recurso;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

public class TesteClasseAbstrataComModificadores implements Especificacao3 {
	ClasseEntidade aguaAbstrata = null;

	ClasseEntidade classeFinal = null;

	@Before
	public void up() {
		aguaAbstrata = new Classe("Agua");
		classeFinal = new Classe("Agua");
		try {
			classeFinal.setFinal(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Test
	public void classeAguaAbstrata() {
		aguaAbstrata.setAbstrata(true);
		Assert
				.assertEquals("abstract class Agua{}", aguaAbstrata
						.codigoFonte());
	}

	@Test
	public void classeAguaFinal() {

		Assert.assertEquals("final class Agua{}", classeFinal.codigoFonte());
	}

	@Test
	public void classeAguaFinalPublic() {
		classeFinal.setModificador(TokensSource.MODIFICADORPUBLICO);
		Assert.assertEquals("public", classeFinal.getModificador());
		Assert.assertEquals("public final class Agua{}", classeFinal
				.codigoFonte());

	}

	@Test
	public void classeAguaFinalPublicRecursoAgua() {
		classeFinal.setModificador(TokensSource.MODIFICADORPUBLICO);
		classeFinal.addRecurso(new Recurso("agua"));
		Assert.assertEquals("import agua;public final class Agua{}",
				classeFinal.codigoFonte());
	}

	@Test
	public void classeAguaFinalPublicRecursoConstrutorSemParametro() {
		classeFinal.setModificador(TokensSource.MODIFICADORPUBLICO);
		classeFinal.addRecurso(new Recurso("agua"));
		classeFinal.addConstrutor(new Construtor(classeFinal));
		Assert.assertEquals("import agua;public final class Agua{Agua(){}}",
				classeFinal.codigoFonte());

	}

}
